#CIBERSORT、TIMER、 xCell、MCPcounter、ESITMATE、 EPIC、IPS、quanTIseq八种

# #下载
# if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")
# 
# depens<-c('tibble', 'survival', 'survminer', 'sva', 'limma', "DESeq2","devtools",
#           'limSolve', 'GSVA', 'e1071', 'preprocessCore', 'ggplot2', "biomaRt",
#           'ggpubr', "devtools", "tidyHeatmap", "caret", "glmnet", "ppcor", "timeROC","pracma")
# for(i in 1:length(depens)){
#   depen<-depens[i]
#   if (!requireNamespace(depen, quietly = TRUE))
#     BiocManager::install(depen,update = FALSE)
# }
# 
# if (!requireNamespace("IOBR", quietly = TRUE))
#  devtools::install_github("IOBR/IOBR")
# 
# 
# BiocManager::install("maftools")    
 
library(IOBR)
library(tidyverse)#数据处理
library(tidyHeatmap)
library(maftools)
library(ggpubr)#绘图
library(ggplot2)
library(survival)#生存分析
library(survminer)#生存曲线

try({
  setwd('./免疫浸润/')
})
 

#输入数据
mydata=read.table("GLIOMA_TPM_MRNA.txt",sep="\t",header=T,check.names=F)

# 找出重复的行名
any(duplicated(rownames(mydata)))
any(duplicated(colnames(mydata)))
dup_row_names <- rownames(mydata)[duplicated(rownames(mydata))]
if (length(dup_row_names) > 0) {
  print(paste("重复的行名:", paste(dup_row_names, collapse = ", ")))
} else {
  print("所有行名都是唯一的。")
}
mydata <- mydata[,-1]



#查看肿瘤微环境_反卷曲_算法
tme_deconvolution_methods
#返回特征估计的可用参数选项
signature_score_calculation_methods
#肿瘤微环境相关特征基因集，$显示具体基因
names(signature_tme)
#代谢相关基因集
names(signature_metabolism)
#与生物医学基础研究相关基因集
names(signature_tumor)
#所有免疫细胞的特征基因集
signature_collection
#查看参考基因集文献出处
signature_collection_citation


mydata <- mydata[,1:50]
write.table(mydata,file="mydata.txt",sep="\t",quote=F,col.names=T)


###方法一：CIBERSORT
#数据转换
try({
  cibersort <- deconvo_tme(eset = mydata,#基因表达矩阵，数值型矩阵/数据框，行名基因列名样本
                           method = "cibersort",#指定方法
                           arrays = F,#是否芯片数据
                           perm = 1#统计分析的置换次数（建议≥100）,cibersort用
  )
  #绘图
  cell_bar_plot(input=cibersort,#20个样本
                id = "ID",
                features = colnames(cibersort)[2:23],
                title="Cell Fraction cibersort",
                legend.position="bottom",#图例位置
                palette=3,#四种画板
                coord_filp = T,#是否翻转坐标轴
                show_col = F#是否显示细胞类型的颜色
  )                     
  
  
  ggsave("Cibersort.pdf",width = 10,height = 8)
  ggsave("Cibersort.png",width = 10,height = 8)
})

###方法二：EPIC
#数据转换
epic <- deconvo_tme(eset = mydata,#基因表达矩阵，数值型矩阵/数据框，行名基因列名样本
                    method = "epic",#指定方法
                    arrays = F,#是否芯片数据
                    )
#绘图
cell_bar_plot(input=epic,#20个样本
              id = "ID",
              features = colnames(epic),
              title="Cell Fraction epic",
              legend.position="bottom",#图例位置
              palette=3,#四种画板
              coord_filp = T,#是否翻转坐标轴
              show_col = F#是否显示细胞类型的颜色
              )        

ggsave("epic.pdf",width = 10,height = 8)
ggsave("epic.png",width = 10,height = 8)

###方法三：MCP
#数据转换
try({
  mcp <- deconvo_tme(eset = mydata, 
                     method = "mcpcounter")
  cell_bar_plot(input=mcp,#20个样本
                id = "ID",
                features = colnames(mcp),
                title="Cell Fraction mcpcounter",
                legend.position="bottom",#图例位置
                palette=1,#四种画板
                coord_filp = T,#是否翻转坐标轴
                show_col = F#是否显示细胞类型的颜色
  )
  ggsave("mcpcounter.pdf",width = 10,height = 8)
  ggsave("mcpcounter.png",width = 10,height = 8)
})

###方法四：xCellibrary(devtools)
# library(devtools)
# devtools::install_local("GSVA")
#数据转换
try({
  xcell <- deconvo_tme(eset = mydata, 
                       method = "xcell",
                       arrays = FALSE)
  #绘图
  cell_bar_plot(input=xcell,#20个样本
                id = "ID",
                features = colnames(xcell),
                title="Cell Fraction xcell",
                legend.position="bottom",#图例位置
                palette=3,#四种画板
                coord_filp = T,#是否翻转坐标轴
                show_col = F#是否显示细胞类型的颜色
  ) 
  
  ggsave("xcell.pdf",width = 10,height = 8)
  ggsave("xcell.png",width = 10,height = 8)
})


###方法五：ESTIMATE
#数据转换

try({
  estimate <- deconvo_tme(eset = mydata, 
                          method = "estimate")
  
  #绘图
  cell_bar_plot(input=estimate,#20个样本
                id = "ID",
                features = colnames(estimate),
                title="Cell Fraction estimate",
                legend.position="bottom",#图例位置
                palette=3,#四种画板
                coord_filp = T,#是否翻转坐标轴
                show_col = F#是否显示细胞类型的颜色
  ) 
  
  ggsave("estimate.pdf",width = 10,height = 8)
  ggsave("estimate.png",width = 10,height = 8)
  
})


###方法六：TIMER
#数据转换
try({
  timer <- deconvo_tme(eset = mydata, 
                       method = "timer", 
                       group_list = rep("stad",dim(mydata)[2]))
  
  #绘图
  cell_bar_plot(input=timer,#20个样本
                id = "ID",
                features = colnames(timer),
                title="Cell Fraction timer",
                legend.position="bottom",#图例位置
                palette=3,#四种画板
                coord_filp = T,#是否翻转坐标轴
                show_col = F#是否显示细胞类型的颜色
  ) 
  
  ggsave("timer.pdf",width = 10,height = 8)
  ggsave("timer.png",width = 10,height = 8)
  
})


###方法七：quantiseq
#数据转换
try({
  quantiseq <- deconvo_tme(eset = mydata, 
                           tumor = TRUE, 
                           arrays = FALSE, 
                           scale_mrna = TRUE, 
                           method = "quantiseq")
  
  #绘图
  cell_bar_plot(input=quantiseq,#20个样本
                id = "ID",
                features = colnames(quantiseq),
                title="Cell Fraction quantiseq",
                legend.position="bottom",#图例位置
                palette=3,#四种画板
                coord_filp = T,#是否翻转坐标轴
                show_col = F#是否显示细胞类型的颜色
  ) 
  
  ggsave("quantiseq.pdf",width = 10,height = 8)
  ggsave("quantiseq.png",width = 10,height = 8)
})

###方法八：IPS
#数据转换

try({
  ips <- deconvo_tme(eset = eset_stad, 
                     method = "ips", 
                     plot= FALSE)
  
  #绘图
  cell_bar_plot(input=ips,#20个样本
                id = "ID",
                features = colnames(ips),
                title="Cell Fraction ips",
                legend.position="bottom",#图例位置
                palette=2,#四种画板
                coord_filp = T,#是否翻转坐标轴
                show_col = F#是否显示细胞类型的颜色
  ) 
  
  ggsave("ips.pdf",width = 10,height = 8)
  ggsave("ips.png",width = 10,height = 8)
  
  
})








#注释详解
deconvo_tme(eset = mydata,#基因表达矩阵，数值型矩阵/数据框，行名基因列名样本
            project = NULL,#项目名称，用于区分不同数据集，默认为空
            method = "tme_deconvolution_methods",#字符串，指定去卷积方法
            arrays = FALSE,#适用于微阵列数据的模式，默认为FALSE，CIBERSORT,svr，xCell用
            tumor = TRUE,#适用于肿瘤样本的签名矩阵/过程，默认为TRUE,EPIC用
            perm = 1000,#统计分析的置换次数（建议≥100）,cibersort和svr_ref用
            reference,#免疫细胞基因矩阵，例如lm22、lm6或使用generateRef/generateRef_rnaseq生成的矩阵
            scale_reference,#逻辑值，指示是否对参考文件进行缩放。如果为TRUE,则参考文件中的值将在行方向上进行居中和缩放，
            plot = FALSE,#是否绘制图形，目前影响“IPS”方法
            scale_mrna,#逻辑值，如果为FALSE，则禁用对不同细胞类型的mRNA含量进行校正，这由计算绝对分数的方法支持（EPIC和quanTIseq）
            group_list = NULL,#肿瘤类型列表的样本
            platform = "affymetrix",#字符串，指示平台类型。默认为“affymetrix”，ESTIMATE用
            absolute.mode = FALSE,#在绝对模式下运行CIBERSORT或svr，默认FALSE
            abs.method = "sig.score",#如果设置了sbsolute为TRUE，则选择方法“no.sumto1”或“sig.score”
            )





exists('xcell')

tme_combine<-cibersort %>% 
  inner_join(.,mcp,by       = "ID") %>% 
  # inner_join(.,xcell,by     = "ID") %>%
  inner_join(.,epic,by      = "ID") %>% 
  inner_join(.,estimate,by  = "ID") %>% 
  inner_join(.,timer,by     = "ID") %>% 
  inner_join(.,quantiseq,by = "ID") %>% 
  inner_join(.,ips,by       = "ID")
dim(tme_combine)



